package com.chen.demoa.utils;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.safety.Whitelist;


import java.io.FileNotFoundException;

import java.io.IOException;


/**
 * @Auther:
 * @Date: 2019/2/27 19:32
 * @Description: xss Illegal label filtering
 */

public class JsoupUtil {


    private static final Whitelist whitelist = Whitelist.simpleText();//jsoup白名单种类，有四种，每一种针对的标签类型不一样，具体的可以ctrl+左键点击simpleText，在jsoup源码中有响应的注释和标签名单

//add myself white list label

    private static final Document.OutputSettings outputSettings = new Document.OutputSettings().prettyPrint(false);

    static {

        whitelist.addAttributes(":all", "style").addTags("p").addTags("strong");//将自定义标签添加进白名单，除开白名单之外的标签都会被过滤

        whitelist.preserveRelativeLinks(true);//这个配置的意思的过滤如果找不到成对的标签，就只过滤单个标签，而不用把后面所有的文本都进行过滤。

//（之前在这个问题上折腾了很久，当<script>标签只有一个时，会<script>标签后面的数据全部过滤）

    }


    public static String clean(String content) { //过滤方法

        return Jsoup.clean(content, "", whitelist, outputSettings);

    }


//test main

    public static void main(String[] args) throws FileNotFoundException, IOException {

        String text = "<a href=\"http://www.baidu.com/a\" onclick=\"alert(1);\"><strong><p>sss</p></strong></a><script>alert(0);</script>sss";

        System.out.println(clean(text));

    }


}